﻿using AIPlugin.Core;
using AIPlugin.Model;
using OpenAI.Chat;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;

namespace AIPlugin.Fetures
{
    /// <summary>
    /// AI代码生成器服务
    /// </summary>
    public class CodeAssistantService
    {
        private readonly ChatClient chatClient;
        public CodeAssistantService(ChatClient chatClient)
        {
            this.chatClient = chatClient;
        }

        /// <summary>
        /// 获取表
        /// </summary>
        /// <param name="desc"></param>
        public List<SqlField> GenSqlTable(SqlTableDesc desc)
        {
            List<SqlField> fields = [];
            var resultTemplate = @"[{
                            ""Name"": ""Id"",
                            ""Type"": ""bigint"",
                            ""AutoIncrement"":false,
                            ""PrimaryKey"": true,
                            ""Comment"": ""用户唯一标识""
                        }]";

            // 更清晰的提示词结构
            string userPrompt = $@"
                                请根据以下需求设计数据库表：
                                1. **表类型/用途**: {desc.Type}
                                2. **详细描述**: {desc.Desc}

                                要求：
                                - 只输出符合 JSON 数组格式的字段定义，不要任何额外解释
                                - 必须包含以下字段属性：Name, Type,AutoIncrement, PrimaryKey, Comment
                                - 字段类型需符合数据库规范（如 VARCHAR 需指定长度）
                                - 请严格按照参考格式返回

                                参考格式：
                                {resultTemplate}
                                ";

            ChatCompletion completion = chatClient.CompleteChat([
                new SystemChatMessage("你是一个资深数据库工程师，专注于生成精确的SQL表结构。"), // 更明确的角色定义
                new UserChatMessage(userPrompt)
            ]);

            // 添加格式验证逻辑
            try
            {
                Console.WriteLine(completion.Content[0].Text);
                fields = JsonSerializer.Deserialize<List<SqlField>>(completion.Content[0].Text)!;
            }
            catch (JsonException)
            {
                // 模型输出不符合格式时兜底处理
            }
            return fields;
        }

    }
}
